// 声明专门的函数用来在分配 Auth 的模态框中显示 Auth 的树形结构数据
function fillAuthTree() {
    var ajaxReturn = $.ajax({
        "url":"assign/getAllAuth",
        "type":"post",
        "dataType":"json",
        "async":false
    });
    if(ajaxReturn.status != 200) {
        layer.msg("请求处理出错！响应状态码是：" + ajaxReturn.status + " 说明是" + ajaxReturn.statusText);
        return ;
    }
    var authList = ajaxReturn.responseJSON.queryData;
    var setting = {
        "data": {
            "simpleData": {
                "enable": true,
                "pIdKey": "categoryId"
            },
            "key": {
                "name": "title"
            }
        },
        "check": {
            "enable": true
        }
    };
    $.fn.zTree.init($("#authTreeDemo"), setting, authList);
    var zTreeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
    zTreeObj.expandAll(true);

    ajaxReturn = $.ajax({
        "url":"assign/getAssignedAuthIdByRoleId",
        "type":"post",
        "data":{
            "roleId":window.roleId
        },
        "dataType":"json",
        "async":false
    });
    if(ajaxReturn.status != 200) {
        layer.msg("请求处理出错！响应状态码是：" + ajaxReturn.status + " 说明是" + ajaxReturn.statusText);
        return ;
    }
    var authIdArray = ajaxReturn.responseJSON.queryData;
    for(var i = 0; i < authIdArray.length; i++) {
        var authId = authIdArray[i];
        var treeNode = zTreeObj.getNodeByParam("id", authId);
        var checked = true;
        var checkTypeFlag = false;
        zTreeObj.checkNode(treeNode, checked, checkTypeFlag);
    }
}

// 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
function generatePage(){
    // 1、获取分页数据
    var pageInfo = getPageInfoRemote();

    // 2、填充表格
    fillTableBody(pageInfo);
}

// 远程访问服务器端程序获得pageInfo数据
function getPageInfoRemote(){
    // 调用$.ajax()函数发送请求并接受$.ajax()函数的返回值
    var ajaxResult = $.ajax({
        "url":"role/getRolePage",
        "type":"post",
        "data":{
            "pageNum":window.pageNum,
            "pageSize":window.pageSize,
            "keyword":window.keyword
        },
        // async为false表示同步请求
        "async":false,
        "dataType":"json"
    });


    // 判断当前响应状态码是否是200
    var statusCode = ajaxResult.status;

    // 如果当前响应状态码不是200，说明发生错误，显示提示消息，让当前函数停止执行
    if (statusCode != 200){
        layer.msg("失败！响应状态码="+statusCode+" 说明信息="+ajaxResult.statusText);
        return null;
    }

    // 如果响应状态码是200，说明请求处理成功，获取pageInfo
    var
        resultEntity = ajaxResult.responseJSON;

    // 从resultEntity中获取result属性
    var result = resultEntity.operationResult;

    // 判断result是否成功
    if (result == "FAILED") {
        layer.msg(resultEntity.operationMessage);
        return null;
    }

    // 确认result为成功后获取pageInfo
    var pageInfo = resultEntity.queryData

    //  返回pageInfo
    return pageInfo;
}

// 填充表格
function fillTableBody(pageInfo){

    // 清空tbody中的旧的内容
    $("#rolePageBody").empty();

    // 判断pageInfo对象是否有效
    if(pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0){
        $("#rolePageBody").append("<tr><td colspan='4' align='center'>抱歉！没有查询到您搜索的数据！</td></tr>");

        return;
    }

    // 使用pageInfo的list属性填充tbody
    for (var i=0;i<pageInfo.list.length;i++){
        var role = pageInfo.list[i];
        var roleId = role.id;
        var roleName = role.name;
        var numberTd = "<td>"+(i+1)+"</td>";
        var checkboxTd = "<td><input type='checkbox' id='"+roleId+"' class='itemBox' ></td>";
        var roleNameTd = "<td>"+roleName+"</td>";
        var checkBtn = "<button id='"+roleId+"' type='button' class='btn btn-success btn-xs checkBtn'><i class=' glyphicon glyphicon-check'></i></button>";
        var pencilBtn = "<button id='"+roleId+"' type='button' class='btn btn-primary btn-xs pencilBtn'><i class=' glyphicon glyphicon-pencil'></i></button>";
        // 通过 button 标签的 id 属性（别的属性其实也可以）把 roleId 值传递到 button 按钮的单击响应函数中，在单击响应函数中使用 this.id
        var removeBtn = "<button id='"+roleId+"' type='button' class='btn btn-danger btn-xs removeBtn'><i class=' glyphicon glyphicon-remove'></i></button>";
        var buttonTd = "<td>"+checkBtn+" "+pencilBtn+" "+removeBtn+"</td>";
        var tr = "<tr>"+numberTd+checkboxTd+roleNameTd+buttonTd+"</tr>";
        $("#rolePageBody").append(tr);

        // 生成分页导航条
        generateNavigator(pageInfo);
    }

}

// 生成分页页码导航条
function generateNavigator(pageInfo){
    // 获取总记录数
    var totalRecord = pageInfo.total;

    //声明相关属性
    var properties = {
        "num_edge_entries": 3,
        "num_display_entries": 5,
        "callback": paginationCallBack,
        "items_per_page": pageInfo.pageSize,
        "current_page": pageInfo.pageNum - 1,
        "prev_text": "上一页",
        "next_text": "下一页"
    }

    // 调用pagination()函数
    $("#Pagination").pagination(totalRecord, properties);
}

// 翻页时回调函数
function paginationCallBack(pageIndex,jQuery){

    // 修改window对象的pageNum属性
    window.pageNum = pageIndex+1;

    // 调用分页函数
    generatePage();

    // 取消页码超链接的默认行为
    return false;

}


// 申明专门的函数显示确认模态框
function showConfirmModal(roleArray){

    // 打开模态框
    $("#confirmModal").modal("show");

    // 清除旧的数据
    $("#roleNameDiv").empty();

    // 在全局变量范围创建数组用来存放角色 id
    window.roleIdArray = [];

    // 遍历 roleArray 数组
    for(var i = 0; i < roleArray.length; i++) {
        var role = roleArray[i];
        var roleName = role.roleName;
        $("#roleNameDiv").append(roleName+"<br/>");
        var roleId = role.roleId;
        // 调用数组对象的 push()方法存入新元素
        window.roleIdArray.push(roleId);
    }
}